package logicaPresentacion;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Map;
import java.util.Observable;
import java.util.Observer;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import logicaNegocio.GestionAdministrador;
import logicaNegocio.GestionAlumnos;
import logicaNegocio.GestionProfesores;
import logicaNegocio.Profesor;


public class VerProfesores extends JInternalFrame implements ActionListener,Observer
{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;	
	private GestionAdministrador gAd;
	private GestionAlumnos gA;
	private JTable tbProfesores;
	private TablaProfesores tabla = null;		
	private String eleccion,dni;
    private JScrollPane scrollPane; 
    private JPanel jpBotones;
    private JButton aceptar, Cancelar, Borrar, buscar;
	private ClaseAObservar observable;
	private Map<String, Profesor> profesores;
	private Profesor P;
	private boolean verBuscador = false;
    
	public VerProfesores(GestionAdministrador GAd,GestionAlumnos GA, GestionProfesores GP, String Eleccion,String Dni, ClaseAObservar observable)
		{
			
			super("Profesores", 
		              true, 
		              false, 
		              true, 
		              true);
			setVisible(true);
			setSize(800,300);
			this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			this.inicializarSubComponentes();
			this.eleccion = Eleccion;
			this.dni = Dni;
			this.gAd = GAd;
			this.gA = GA;
			this.observable = observable;
			blnCargarFormulario();
		}
	public void blnCargarFormulario()
	{		
		crearTablaProfesores();
		this.setLocation(0,0);
		this.setVisible(true);
		inicializarSubComponentes();
	}
	
	public void crearTablaProfesores()
	{		
		tbProfesores=null;
		tabla=new TablaProfesores();
		
		if ((eleccion == "Administrador")||(eleccion == "Borrar"))
		{
			tabla.crearTabla(gAd.getProfesores());
		}
		if (eleccion == "Alumno")
		{
			tabla.crearTabla(gA.getProfesores());
		}
		tbProfesores = new JTable(tabla);
		tbProfesores.setPreferredScrollableViewportSize(new Dimension(500, 70));
		tbProfesores.setFillsViewportHeight(true);
		tbProfesores.setEnabled(true);
		tbProfesores.setRowSelectionAllowed(true);
		tabla.fireTableDataChanged();
				
	}
	public void inicializarSubComponentes()
	{
		try
		{
		scrollPane= new JScrollPane(tbProfesores);

		this.getContentPane().setLayout(new BorderLayout());
        this.getContentPane().add(scrollPane,"Center");
        
        Box boxbotones;
        if(eleccion.equals("Borrar"))
        {
        	Borrar=new JButton("Borrar");
        	Borrar.addActionListener(this);
			Cancelar=new JButton("Cancelar");
			Cancelar.addActionListener(this);
	      
	        boxbotones = Box.createHorizontalBox();
	        boxbotones.add(Borrar);
	        Box.createHorizontalStrut(20);
	        boxbotones.add(Cancelar);
	        
	        jpBotones=new JPanel();
			jpBotones.setLayout(new FlowLayout());
			jpBotones.add(boxbotones);
        }
        else
        {
        
	        aceptar=new JButton("Aceptar");
			aceptar.addActionListener(this);
			buscar=new JButton("Buscar");
			buscar.addActionListener(this);
			jpBotones=new JPanel();
			jpBotones.setLayout(new FlowLayout());
			jpBotones.add(aceptar);
			jpBotones.add(buscar);
        }
		
					
		this.getContentPane().add(jpBotones,"South");	
		}
		catch(Exception e)
		{		
		}
	}
		
	public void actionPerformed(ActionEvent e)
	{	
		if (e.getSource() instanceof JButton) 
		{
			JButton btnPulsado=(JButton)e.getSource();
			
			if ((btnPulsado==aceptar)||(btnPulsado==Cancelar)) 
			{
				dispose();
			}
			if(btnPulsado==Borrar)
			{
				int row = tbProfesores.getSelectedRow();
				if(row>=0)
				{
					profesores = gAd.getProfesores();
					
					P = profesores.get(tbProfesores.getValueAt(row, 5));//4 es el dni
					System.out.println(P.getApellido());
					gAd.borrarProfesores(P);

					observable.setTabla();
					
					JOptionPane.showMessageDialog(null, "Tupla Borrada");
					dispose();
				}
				else
				{
					JOptionPane.showMessageDialog(null, "Debe seleccionar una fila si quiere borrar una tupla");          
				}
			}	
			if(btnPulsado==buscar)
			{
				verBuscador = true;
				dispose();
			}
		}
	}
	public boolean getVerBuscador()
	{
		return verBuscador;
	}
	
	public void update(Observable arg0, Object arg1) 
	{
		tbProfesores=null;	
		tabla.crearTabla(gAd.getProfesores());
		tbProfesores = new JTable(tabla);
		tbProfesores.setPreferredScrollableViewportSize(new Dimension(500, 70));
		tbProfesores.setFillsViewportHeight(true);
		tbProfesores.setEnabled(true);
		tbProfesores.setRowSelectionAllowed(true);
		tabla.fireTableDataChanged();
	}
	
	class TablaProfesores extends AbstractTableModel
    {
 		/**
		 * 
		 */
		private static final long serialVersionUID = -8399346935923604471L;
		private String[] columnNames = {"Nombre","Apellido","Genero", "Direccion","Telefono"," Dni","Sueldo"," Edad"};
		private Object[][] data;
	        
        public void crearTabla(Map<String,Profesor> Profesores)
        {    
        	
        	
    		int cont;
    		if ((eleccion.equals("Administrador"))||(eleccion.equals("Borrar")))
    		{  		
    			int filas = Profesores.size();
	    		data=new Object[filas][];
	    		cont=0;

	    		Profesores = gAd.ordenarProfesores(Profesores);

	    		for (Map.Entry<String, Profesor> entry : Profesores.entrySet())
	    		{

	    			Profesor P = Profesores.get(entry.getKey());
	    			Object[]a={
	    					   new String(P.getNombre()),
	    					   new String(P.getApellido()),
	    					   new String(P.getGenero()),
	    					   new String(P.getDireccion()),
	    					   new Integer(P.getTelefono()),
	    					   new String(P.getDni()),
	    					   new Double(P.getSueldo()),
	    					   new Integer(P.getEdad()),
	    			};
	    			
	    			
	    			
	    			data[cont]=a;
	    			cont++;
	    		}
	    		
	    		
    		}
    		
    		if (eleccion.equals("Alumno"))
    		{
    			String[] column = {"Nombre","Apellido","Genero", "Direccion","Telefono"," Dni","Sueldo"," Edad","Asignatura"};
    			Profesores = gA.getProfesores();
    			cont = gA.getNoProfesores(dni);

	    		data=new Object[cont][];
    			String [] NoProfesores =  gA.toStringProfesor(dni, cont);
    			String [] AsignaturaProfesor = gA.getAsignaturaProfesor();
    			for (int i = 0 ; i<NoProfesores.length; i++)
	    		{
	    			Profesor P = (Profesor) Profesores.get(NoProfesores[i]);
	    			Object[]a={
	    					   new String(P.getNombre()),
	    					   new String(P.getApellido()),
	    					   new String(P.getGenero()),
	    					   new String(P.getDireccion()),
	    					   new Integer(P.getTelefono()),
	    					   new String(P.getDni()),
	    					   new Double(P.getSueldo()),
	    					   new Integer(P.getEdad()),
	    					   new String (AsignaturaProfesor[i])
	    			};
	    			data[i]=a;
	    			columnNames = column;
	    		} 
    		}
        }
        
        public int getColumnCount() 
	    {
	        return columnNames.length;
	    }
	
	    public int getRowCount() {
	        return data.length;
	    }
	
	    public String getColumnName(int col) 
	    {
	        return columnNames[col];
	    }
	
	    public Object getValueAt(int row, int col) 
	    {
	        return data[row][col];
	    }
    }
}
